package com.shazhu.common.utils.nongjt;

import com.qiniu.common.QiniuException;
import com.qiniu.http.Response;
import com.qiniu.storage.BucketManager;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.Region;
import com.qiniu.storage.UploadManager;
import com.qiniu.storage.model.DefaultPutRet;
import com.qiniu.util.Auth;
import com.shazhu.common.core.domain.AjaxResult;
import com.shazhu.common.utils.file.FileUploadUtils;
import io.swagger.v3.oas.annotations.Operation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.multipart.MultipartFile;

import java.io.InputStream;

/**
 * @author hzliu
 * @version 1.0
 * @since 2025/7/30 21:48
 */
@Component
public class QiniuUtils {
    private static final Logger log = LoggerFactory.getLogger(QiniuUtils.class);

    /**
     * AK 在个人中心秘钥管理里获取，并配置在环境变量中
     */
@Value("z-WFeLSDNpMytlPCjB5Nv8RsyEhAqoLN2zFt0WP_")
    private String accessKey;
    /**
     * SK 在个人中心秘钥管理里获取，并配置在环境变量中
     */
    @Value("oy94cYI7apMqQtuCQJ8FCcqydcEzwybXYiUf4D5Q")
    private String secretKey;
    /**
     * 空间名称
     */
    @Value("shazhu-nongjt")
    private String bucket;
    /**
     * 外联域名  在空间管理->域名管理里可以获取一个测试域名
     */
    @Value("t3ague95m.hn-bkt.clouddn.com")
    private String outerUrl;

    /**
     * 文件上传
     *
     * @param file     上传文件
     * @param fileName 文件名
     * @return 文件上传成功地址
     */
    public String upload(MultipartFile file, String fileName) {
        try {
            return upload(file.getInputStream(), fileName);
        } catch (Exception e) {
            log.error("{} 文件上传失败：{}", fileName, e);
            return null;
        }
    }

    /**
     * 文件上传
     *
     * @param inputStream 上传文件流
     * @param fileName    文件名
     * @return 文件上传成功地址
     */
    public String upload(InputStream inputStream, String fileName) {
        Auth auth = Auth.create(accessKey, secretKey);
        String upToken = auth.uploadToken(bucket);
        // 构造一个带指定 Region 对象的配置类
        Configuration cfg = new Configuration(Region.region2());
        UploadManager uploadManager = new UploadManager(cfg);
        try {
            Response response = uploadManager.put(inputStream, fileName, upToken, null, null);
            // 解析上传成功的结果
            DefaultPutRet putRet = response.jsonToObject(DefaultPutRet.class);
            if (null != putRet) {
                return outerUrl + "/" + putRet.key;
            }
        } catch (Exception e) {
            log.error("{} 文件上传失败：{}", fileName, e);
        }
        return null;
    }


    /**
     * 删除
     *
     * @param fileName 文件名
     * @return true 删除成功，false 删除失败
     */
    public Boolean remove(String fileName) {
        Auth auth = Auth.create(accessKey, secretKey);
        Configuration cfg = new Configuration(Region.region2());
        BucketManager bucketManager = new BucketManager(auth, cfg);
        try {
            bucketManager.delete(bucket, fileName);
            return Boolean.TRUE;
        } catch (QiniuException e) {
            log.error("{} 文件删除失败：{}", fileName, e);
            return Boolean.FALSE;
        }
    }


}